package com.crm.sys.dao;

import java.util.List;
import java.util.Map;

import com.crm.sys.model.Announcement;
import com.crm.sys.model.CallLog;
import com.crm.sys.model.City;
import com.crm.sys.model.CityAndProvinceDic;
import com.crm.sys.model.Configure;
import com.crm.sys.model.ConfigureItem;
import com.crm.sys.model.Department;
import com.crm.sys.model.Log;
import com.crm.sys.model.Province;
import com.crm.sys.model.Role;
import com.crm.sys.model.RoleItme;
import com.crm.sys.model.RoleProduct;
import com.crm.sys.model.SysTerm;

public interface SysDao {
	/**
	 * 取得所有省份列表
	 * @return
	 */
	public List<Province> getProvinceList();
	/**
	 * 根据省份Id 取得省份下的城市列表
	 * @param proid
	 * @return
	 */
	public List<City> getCityListByProId(City city);
	/**
	 * 取得所有的城市对应的省份
	 * @return
	 */
	public List<CityAndProvinceDic> getCityList();
	/**
	 * 保存省份
	 * @param pro
	 * @return
	 */
	public Province insertProvince(Province pro);
	/**
	 * 保存城市
	 * @param city
	 * @return
	 */
	public City insertCity(City city);
	/**
	 * 根据配置编码获取配置信息
	 * @param name
	 * @return
	 */
	public Configure getConfigureByName(Configure cf);
	/**
	 * 获取配置表列表
	 * */
	public List<Configure> getConfigureList(Configure c);
	/**
	 * 获取配置表详情表列表
	 * */
	public List<ConfigureItem> getConfigureItemList(ConfigureItem ci);
	/**
	 * 最大排序号
	 * */
	public Integer getMaxOrderNumber(ConfigureItem ci);
	/**
	 * 添加配置表
	 * */
	public int addConfigure(Configure c);
	/**
	 * 添加配置表详情
	 * */
	public int addConfigureItem(ConfigureItem ci);
	/**
	 *  根据ID查询配置项列表
	 * @param value  配置项值
	 * @param cid  配置表ID
	 * @param pid  父ID
	 * @return
	 */
	public List<ConfigureItem> getConfigureItemById(ConfigureItem cfi);
	
	/**
	 * 删除配置表
	 * */
	public int deleteConfigure(Configure c);
	
	/**
	 * 删除配置表详情
	 * */
	public int deleteConfigureItem(ConfigureItem ci);
	
	/**
	 * 修改配置表
	 * */
	public int updateConfigure(Configure c);
	/**
	 * 修改配置表详情
	 * */
	public int updateConfigureItem(ConfigureItem ci);
	
	/**
	 * 取得所有部门
	 * @param pid 父ID
	 * @return
	 */
	public List<Department>  getDepartmentAll(Department dept);
	/**
	 * 取得部门详情
	 * @param id
	 * @return
	 */
	public Department getDepartmentById(Department dept);
	/**
	 * 添加部门
	 * */
	public int addDepartment(Department d);
	/**
	 * 删除部门
	 * */
	public int deleteDepartment(Long id);
	/**
	 * 修改部门
	 * */
	public int updateDepartment(Department d);
	/**
	 * 根据parentid获取部门列表
	 * */
	public List<Department> getDeptListByPid(Long pid);
	/**
	 * 根据pid获取子部门数量
	 * */
	public int getDtSonCountByPid(Long pid);
	/**
	 *  角色查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public List<Role> getRoleList(Role role) ;
	/**
	 *  角色添加
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public Role insertRole(Role role);
	
	/**
	 *  产品添加
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public RoleProduct insertRoleProduct(RoleProduct roleproduct);
	/**
	 * 角色修改的角色ID查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public Role getRoleByid(Role role);
	/**
	 * 角色修改的产品ID查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public List<RoleProduct> getRoleProductByid(RoleProduct role);
	/**
	 * 角色修改的根据产品RID删除
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int deleteRoleProduct(Role role);
	/**
	 * 角色修改的更新
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int updateRole(Role role);
	
	/**
	 *  角色禁用启用
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int updateRoleState(Role role);
	 
	/**
	 *  资源查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public List<SysTerm> getSysTermList(SysTerm systerm) ;
	/**
	 *  资源添加
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public SysTerm insertSysTerm(SysTerm systerm);
	/**
	 *  资源修改的ID查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public SysTerm getSysTermByid(SysTerm term);
	/**
	 * 资源修改的更新
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int updateSysTerm(SysTerm systerm);
	/**
	 *资源绑定查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public List<SysTerm> getSysTermBound(int rid) ;
	/**
	 *  资源绑定保存的删除
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int deleteSysTermBound(RoleItme term);
	/**
	 *  资源绑定保存的更新
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public int updateSysTermBound(RoleItme term);
	/**
	 * 系统菜单查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public List<SysTerm> getMuneAll(SysTerm term);
	/**
	 * 权限菜单查询
	 * @param term
	 * @return
	 */
	public List<SysTerm> getMenuByRid(SysTerm term);
	
	/**
	 *系统菜单拦截器查询
	 * @param response
	 * @param request
	 * @param redirectAttributes
	 * @return
	 * @throws Exception
	 */
	public List<SysTerm> getRoleMune(SysTerm term);
	/**
	 *  新增日志内容
	 * @param log
	 */
	public int insertLog(Log log);
	/**
	 * 取得日志详情
	 * @param log
	 * @return
	 */
	public List<Log> getLogList(Log log);
	/**
	 * 取得复制电话次数多的用户
	 * @return
	 */
	public List<Log> getCopyCount();
	/**
	 * 
	 * */
	public int insertAllTransLog(Log log);
	/**
	 *  Excel导入时城市关联省级的名称查询
	 * @param res
	 * @return
	 */
	public City getCityContantsProvince(String name);
	/**
	 *  Excel导入时省级详情的名称查询
	 * @param res
	 * @return
	 */
	public Province getProvinceByName(String name);
	/**
	 * 获取系统公告
	 * @return
	 */
	public List<Announcement> getAnnouncements();
	
	/**
	 * 新.获取呼入呼出列表列表
	 * */
	public List<CallLog> getCallLogList(CallLog cl);
	
	public int insertCallLog(CallLog cl);
	/**
	 * 获取待获取录音的呼叫内容
	 * @return
	 */
	public List<CallLog>  getUpdCallLogList();
	/**
	 * 更新呼叫中心记录
	 * @param cl
	 * @return
	 */
	public int updateCallLog(CallLog cl);
	
	/**
	 * 获取呼叫统计数据
	 * @param cl
	 * @return
	 */
	public int  getCallLogData(CallLog cl);
	
	/**
	 * 获取呼叫有效时长
	 * @param cl
	 * @return
	 */
	public int  getCallLogTimeTotal(CallLog cl);
	/**
	 * 获取电话拨打时间用户排行
	 * @return
	 */
	public  List<CallLog>  getTimesUserCallLogList();
	/**
	 * 根据呼叫CODE查询是否已经生成数据
	 * @param cl
	 * @return
	 */
	public int getCallLogCountByCode(CallLog cl);
}
